﻿/**
 * EventCentral Class
 * Copyright (c) 2009 Marco Di Giuseppe |	http://designmarco.com
 * marco[at]designmarco[dot]com
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package com.designmarco.events
{
	/**
	 * EventCentral provides a central dispatch & listener target.
	 * @example
	 <code>
			Class A:
			import com.designmarco.event.EventCentral;
			EventCentral.getInstance().addEventListener(type:String, listener:Function);
			
			Class B:
			import com.designmarco.event.EventCentral;
			EventCentral.getInstance().dispatchEvent(new CustomEvent(CustomEvent.COMPLETE));
	</code>
	*/
	import flash.events.EventDispatcher
	import flash.events.Event;
	
	public class EventCentral extends EventDispatcher
	{
		private static var instance:EventCentral = new EventCentral();
		
		public function EventCentral()
		{
			if (instance)
				throw new Error("EventCentral can only be accessed through EventCentral.getInstance()");
			
		}
		
		/**
		 * Entry Point to Event Central
		 * @return EventCentral Instance
		 */
		public static function getInstance():EventCentral
		{
			return instance;
		}
				
		/**
		 * Event Dispatch
		 * @param	event
		 * @return  true if successful
		 */
		public override function dispatchEvent(event:Event):Boolean
		{
			return super.dispatchEvent(event);
		}
	}
}
